rename to _gtk_tree_selection_row_is_selectable and export internally,
authorKristian Rietveld <kris@imendio.com>
Wed, 1 Mar 2006 12:18:57 +0000 (12:18 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Wed, 1 Mar 2006 12:18:57 +0000 (12:18 +0000)
2006-03-01  Kristian Rietveld  <kris@imendio.com>

* gtk/gtktreeselection.c (row_is_selectable): rename to
_gtk_tree_selection_row_is_selectable and export internally,
(gtk_tree_selection_real_select_node): changed so it is always
possible to unselect insensitive nodes, changed the logic a bit to
be more clear.

* gtk/gtktreeprivate.h: add _gtk_tree_selection_row_is_selectable.

* gtk/gtktreeview.c (gtk_tree_view_row_changed): Unselect a row if
it became insensitive.

ChangeLog
ChangeLog.pre-2-10
gtk/gtktreeprivate.h
gtk/gtktreeselection.c
gtk/gtktreeview.c

index 066e0fdbfea60bb497c98a9a7a124beb9894fcbd..500aae7b389f5c2602db748aac0bb0fc8fe1c68d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2006-03-01  Kristian Rietveld  <kris@imendio.com>
+
+       * gtk/gtktreeselection.c (row_is_selectable): rename to
+       _gtk_tree_selection_row_is_selectable and export internally,
+       (gtk_tree_selection_real_select_node): changed so it is always
+       possible to unselect insensitive nodes, changed the logic a bit to
+       be more clear.
+
+       * gtk/gtktreeprivate.h: add _gtk_tree_selection_row_is_selectable.
+
+       * gtk/gtktreeview.c (gtk_tree_view_row_changed): Unselect a row if
+       it became insensitive.
+
 2006-02-27  Federico Mena Quintero  <federico@novell.com>
 
        * gtk/gtkfontsel.c (gtk_font_selection_set_font_name): Check that
index 066e0fdbfea60bb497c98a9a7a124beb9894fcbd..500aae7b389f5c2602db748aac0bb0fc8fe1c68d 100644 (file)
@@ -1,3 +1,16 @@
+2006-03-01  Kristian Rietveld  <kris@imendio.com>
+
+       * gtk/gtktreeselection.c (row_is_selectable): rename to
+       _gtk_tree_selection_row_is_selectable and export internally,
+       (gtk_tree_selection_real_select_node): changed so it is always
+       possible to unselect insensitive nodes, changed the logic a bit to
+       be more clear.
+
+       * gtk/gtktreeprivate.h: add _gtk_tree_selection_row_is_selectable.
+
+       * gtk/gtktreeview.c (gtk_tree_view_row_changed): Unselect a row if
+       it became insensitive.
+
 2006-02-27  Federico Mena Quintero  <federico@novell.com>
 
        * gtk/gtkfontsel.c (gtk_font_selection_set_font_name): Check that
index 459faf0d177db716dceaee5ebcb6a1314ec6fc5d..dad8db41215b9bbea3ff17592dcc714d8e5eacc1 100644 (file)
@@ -366,6 +366,9 @@ GtkTreeSelection* _gtk_tree_selection_new                (void);
 GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView      *tree_view);
 void              _gtk_tree_selection_set_tree_view      (GtkTreeSelection *selection,
                                                           GtkTreeView      *tree_view);
+gboolean          _gtk_tree_selection_row_is_selectable  (GtkTreeSelection *selection,
+                                                         GtkRBNode        *node,
+                                                         GtkTreePath      *path);
 
 void             _gtk_tree_view_column_cell_render      (GtkTreeViewColumn *tree_column,
                                                          GdkWindow         *window,
index 90a0dac1745200e0d6ba76f38a58e7e9632f8718..1ced62de68d1e78ef469ee33b01b3acf2ead7c07 100644 (file)
@@ -1294,10 +1294,10 @@ tree_column_is_sensitive (GtkTreeViewColumn *column,
   return sensitive;
 }
 
-static gboolean
-row_is_selectable (GtkTreeSelection *selection,
-                  GtkRBNode        *node,
-                  GtkTreePath      *path)
+gboolean
+_gtk_tree_selection_row_is_selectable (GtkTreeSelection *selection,
+                                      GtkRBNode        *node,
+                                      GtkTreePath      *path)
 {
   GList *list;
   GtkTreeIter iter;
@@ -1386,7 +1386,7 @@ _gtk_tree_selection_internal_select_node (GtkTreeSelection *selection,
            {
              /* We only want to select the new node if we can unselect the old one,
               * and we can select the new one. */
-             dirty = row_is_selectable (selection, node, path);
+             dirty = _gtk_tree_selection_row_is_selectable (selection, node, path);
 
              /* if dirty is FALSE, we weren't able to select the new one, otherwise, we try to
               * unselect the new one
@@ -1502,7 +1502,7 @@ gtk_tree_selection_real_select_node (GtkTreeSelection *selection,
                                     GtkRBNode        *node,
                                     gboolean          select)
 {
-  gboolean selected = FALSE;
+  gboolean toggle = FALSE;
   GtkTreePath *path = NULL;
 
   select = !! select;
@@ -1510,11 +1510,14 @@ gtk_tree_selection_real_select_node (GtkTreeSelection *selection,
   if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED) != select)
     {
       path = _gtk_tree_view_find_path (selection->tree_view, tree, node);
-      selected = row_is_selectable (selection, node, path);
+      if (!select)
+       toggle = TRUE;
+      else
+       toggle = _gtk_tree_selection_row_is_selectable (selection, node, path);
       gtk_tree_path_free (path);
     }
 
-  if (selected == TRUE)
+  if (toggle)
     {
       node->flags ^= GTK_RBNODE_IS_SELECTED;
 
index f2994684aabe9dd4220af647ef465a2705e9dd6c..492678c5abdfad67e532030a0c258e3bb64389e2 100644 (file)
@@ -7238,6 +7238,11 @@ gtk_tree_view_row_changed (GtkTreeModel *model,
   if (tree == NULL)
     goto done;
 
+  /* Check if the node became insensitive, and if so, unselect it */
+  if (!_gtk_tree_selection_row_is_selectable (tree_view->priv->selection,
+                                             node, path))
+    gtk_tree_selection_unselect_path (tree_view->priv->selection, path);
+
   if (tree_view->priv->fixed_height_mode
       && tree_view->priv->fixed_height >= 0)
     {